package generics;

import java.util.*;
/**
 * 泛型 样例
 * 泛型类
 */
public class genericsClassTest<T> {

    private T t;

    public void add(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

    public static void main(String[] args) {
        genericsClassTest<Integer> integerBox = new genericsClassTest<Integer>();
        genericsClassTest<String> stringBox = new genericsClassTest<String>();

        integerBox.add(new Integer(10));
        stringBox.add(new String("牛客教程"));

        System.out.printf("整型值为 :%d\n\n", integerBox.get());
        System.out.printf("字符串为 :%s\n", stringBox.get());


        // 类型通配符
        List<String> name = new ArrayList<String>();
        List<Integer> age = new ArrayList<Integer>();
        List<Number> number = new ArrayList<Number>();

        name.add("icon");
        age.add(18);
        number.add(314);

        getData(name);
        getData(age);
        getData(number);

    }

    /**
     * 类型通配符
     * @param data 所有List<具体类型实参>的父类
     */
    public static void getData(List<?> data) {
        System.out.println("data :" + data.get(0));
    }

    /**
     * 上限类型通配符
     * @param data 这里限定只有数字类型，若如上述 getData(name); 的调用，则会报错
     */
    public static void getUperNumber(List<? extends Number> data) {
        System.out.println("data :" + data.get(0));
    }
}
